package com.softtown.modules.workflow.service;

import com.softtown.common.service.BaseService;
import com.softtown.modules.workflow.dto.SwfTaskDTO;
import com.softtown.modules.workflow.entity.SwfTaskEntity;

import java.util.List;

/**
 * @author: Dingyayong
 * @Date: 2019/8/22 14:40
 * @Description:
 */
public interface SwfTaskService extends BaseService<SwfTaskEntity> {
    /**
     * 通过公司id 和创建者id 和流程实例 找出对应的审批任务
     *
     * @param compId
     * @param creator
     * @param procInstId
     * @return SwfTaskEntity
     * @author Dingyayong
     * @date 2019/8/26 11:34
     */
    SwfTaskEntity getSwfTaskByCreator(Long compId, Long creator, Long procInstId);

    /**
     * 撤销通过公司id 和创建者id 和流程实例 找出对应的审批任务
     *
     * @param compId
     * @param creator
     * @param procInstId
     * @return SwfTaskEntity
     * @author Dingyayong
     * @date 2019/8/26 11:34
     */
    SwfTaskEntity getSwfTaskByCreatorByStatus(Long compId, Long creator, Long procInstId);

    /**
     * 更新审批任务
     *
     * @param swfTaskEntity
     * @return
     * @author Dingyayong
     * @date 2019/8/26 14:32
     */
    void updateSwfTask(SwfTaskEntity swfTaskEntity);

    /**
     * 获取待我审批中的审批上一审批人
     *
     * @param swfTaskDTO
     * @return List
     * @author Dingyayong
     * @date 2019/9/11 16:38
     */
    SwfTaskEntity getswfHstAprvLast(SwfTaskDTO swfTaskDTO);

    /**
     * 通过公司id 和流程实例 找出对应的审批任务
     *
     * @param compId
     * @param procInstId
     * @return SwfTaskEntity
     * @author Dingyayong
     * @date 2019/8/26 11:34
     */
    SwfTaskEntity getSwfTaskByApplByprocInstId(Long compId, Long procInstId);

    /**
     * 获取当前任务审批段
     *
     * @param compId
     * @param procInstId
     * @return SwfTaskEntity
     * @author Dingyayong
     * @date 2019/8/26 11:34
     */
    SwfTaskEntity getNowTaskPhase(Long compId, Long procInstId);

    /**
     * 获取当前审批人信息
     *
     * @param compId
     * @param procInstId
     * @return SwfTaskEntity
     * @author Dingyayong
     * @date 2019/8/26 11:34
     */
    SwfTaskEntity getNewApproveInfo(Long compId, Long procInstId);

    /**
     * 获取审批上一审批人
     *
     * @param
     * @return
     * @author Dingyayong
     * @date 2019/9/29 16:27
     */
    SwfTaskEntity getLastswfHstAprv(Long compId, Long aprvUserId, Long procInstId);

    /**
     * 获取最新任务
     *
     * @param compId
     * @param procInstId
     * @return SwfTaskEntity
     * @author Dingyayong
     * @date 2019/8/26 11:34
     */
    SwfTaskEntity getNewSwfTaskByApplByprocInstId(Long compId, Long procInstId);


    /**
     * @Author: Ding Ya Yong
     * @Description: 获取所有审批者
     * @Date: 2021/10/25 19:54
     * @Param: [compId, procInstId]
     * @return: java.util.List<com.softtown.modules.entity.SwfTaskEntity>
     **/
    List<SwfTaskEntity> getAllApprover(Long compId,Long procInstId,Integer applSeqNum);


    /**
     * @Author: Ding Ya Yong
     * @Description: 找出当前审批任务最新一次提交次数
     * @Date: 2021/10/31 8:52
     * @Param: [compId, procInstId]
     * @return: com.softtown.modules.entity.SwfTaskEntity
     **/
    SwfTaskEntity getMaxApplSeqNum(Long compId,Long procInstId);
}
